<?php
/**
 * Created by IntelliJ IDEA.
 * User: Neo
 * Date: 2017/4/10
 * Time: 10:39
 */

namespace Lib;


class PhoneVerify
{


    protected $config =	array(
        'expire'    =>  300,            // 验证码过期时间（s）
        'length'    =>  6,               // 验证码位数
        'reset'     =>  false,           // 验证成功后是否重置
    );
    
    /**
     * 架构方法 设置参数
     * @access public
     * @param  array $config 配置参数
     */
    public function __construct($config=array()){
        $this->config   =   array_merge($this->config, $config);
    }

    /**
     * 使用 $this->name 获取配置
     * @access public
     * @param  string $name 配置名称
     * @return multitype    配置值
     */
    public function __get($name) {
        return $this->config[$name];
    }

    /**
     * 设置验证码配置
     * @access public
     * @param  string $name 配置名称
     * @param  string $value 配置值
     * @return void
     */
    public function __set($name,$value){
        if(isset($this->config[$name])) {
            $this->config[$name]    =   $value;
        }
    }

    /**
     * 检查配置
     * @access public
     * @param  string $name 配置名称
     * @return bool
     */
    public function __isset($name){
        return isset($this->config[$name]);
    }

    /**
     * 验证验证码是否正确
     * @access public
     * @param string $code 用户验证码
     * @param string $id 验证码标识
     * @return bool 用户验证码是否正确
     */
    public function check($code, $id = '') {
        // 验证码不能为空
        $secode = session("Verify{$id}");
        if(empty($code) || empty($secode)) {
            return false;
        }
        // session 过期
        if(NOW_TIME - $secode['verify_time'] > $this->expire) {
            session("Verify{$id}", null);
            return false;
        }

        if($code == $secode['verify_code']) {
            $this->config['reset'] && session("Verify{$id}", null);
            return true;
        }

        return false;
    }

    /**
     * 输出验证码并把验证码的值保存的session中
     * 验证码保存到session的格式为： array('verify_code' => '验证码值', 'verify_time' => '验证码创建时间');
     * @access public
     * @param string $id 要生成验证码的标识
     * @param string $phone
     * @return string
     */
    public function send($id = '',$phone) {
        $verify_code=rand_str();
        $Sms = new SMS();
        $Sms->send($phone, "您的验证码为：{$verify_code}，".($this->config['expire']/60)."分钟内有效！", __METHOD__);
        $code = $Sms->getCode();
        if ($code > 0) {
            session("Verify{$id}.verify_code",$verify_code);
            session("Verify{$id}.verify_time",$this->config['expire']);
            show(1, '短信发送成功，请注意查看');
        } else {
            show(0, $Sms->getResult());
        }

    }

}